package com.android.fastride.model.http.service;

import com.android.fastride.model.db.entity.DistributionCount;
import com.android.fastride.model.db.entity.FastRideMessage;
import com.android.fastride.model.db.entity.FinishedOrdersCountResponse;
import com.android.fastride.model.db.entity.OrderResponse;
import com.android.fastride.model.db.entity.Rating;
import com.android.fastride.model.http.entity.LoginUserInfoEntity;
import com.android.fastride.model.http.entity.UpdateEntity;

import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import rx.Observable;

/**
 * 布控系统对应的接口访问
 * create by dzl
 */
public interface ControlSysService {

	/**
	 * 手机号登录接口
	 *
	 * @param username 手机号码
	 * @param password    用户密码 （验证码与密码二者必填其一）
	 * @return
	 */
	@POST(value = "user/deliveryStaff/login")
	@FormUrlEncoded
	Observable<LoginUserInfoEntity> loginByPwd(@Field("username") String username,
											   @Field("password") String password);

	/**
	 * 修改密码
	 * @param phone  手机号码
	 * @param oncepwd 旧密码
	 * @param twicepwd 新密码
	 * @return
	 */
	@POST(value = "user/deliveryStaff/resertpwd")
	@FormUrlEncoded
	Observable<String> changePassword(@Field("phone") String phone,
									  @Field("oncepwd") String oncepwd,
									  @Field("twicepwd") String twicepwd);

	/**
	 * 配送员配送统计（缺少参数）
	 * @return
	 */
	@POST("delivery/mess/count")
	@FormUrlEncoded
	Observable<DistributionCount> distributionCount();


	/**
	 * 获取当前用户信息
	 *
	 * @return
	 */
	@POST(value = "delivery/mess/message")
	@FormUrlEncoded
	Observable<LoginUserInfoEntity> getUserInfo();

	/**
	 * 我的评价
	 *
	 * @return
	 */
	@POST(value = "delivery/mess/commentsHome")
	@FormUrlEncoded
	Observable<Rating> getMyRate();

	/**
	 * 评价列变
	 *
	 * @return
	 */
	@POST(value = "delivery/mess/commentsList")
	@FormUrlEncoded
	Observable<Rating> getMyRateList();

	/**
	 * 通知中心
	 *
	 * @return
	 */
	@POST(value = "delivery/mess/noticesList")
	@FormUrlEncoded
	Observable<FastRideMessage> getNotice(@Field("row") int row,
										  @Field("page") int page);

	/**
	 * 待完成模块顶层菜单栏总数查询
	 *
	 * @return
	 */
	@GET(value = "orders/deliveryStaff/tbdCompletedList")
	@FormUrlEncoded
	Observable<String> getTbdCompletedList();

	/**
	 * 任务发送(待接单)
	 *
	 * @return
	 */
	@POST(value = "orders/deliveryStaff/pending")
	@FormUrlEncoded
	Observable<OrderResponse> getPending(@Field("row") int row,
										 @Field("page") int page);

    /**
     * 已经抢单(待取货)
     *
     * @return
     */
    @POST(value = "orders/deliveryStaff/pickupList")
    @FormUrlEncoded
    Observable<OrderResponse> getPickup(@Field("row") int row,
								@Field("page") int page);

    /**
     * 快递员已取到货(配送中)
     *
     * @return
     */
    @POST(value = "orders/deliveryStaff/distribution")
    @FormUrlEncoded
    Observable<OrderResponse> getDistributionList(@Field("row") int row,
												  @Field("page") int page);

    /**
     * 已完成列表页顶层菜单总数
     *
     * @return
     */
    @GET(value = "orders/deliveryStaff/finishedList")
    Observable<FinishedOrdersCountResponse> getFinishedList();

    /**
     * 已完成订单
     *
     * @return
     */
    @POST(value = "orders/deliveryStaff/finishOrders")
    @FormUrlEncoded
    Observable<OrderResponse> getFinishedOrderList(@Field("row") int row,
												   @Field("page") int page,
												   @Field("startDate") String startDate,
												   @Field("endDAte") String endDAte);


    /**
     * 已取消订单
     *
     * @return
     */
    @POST(value = "orders/deliveryStaff/cancelOrders")
    @FormUrlEncoded
    Observable<OrderResponse> getCancelOrders(@Field("row") int row,
											  @Field("page") int page,
											  @Field("startDate") String startDate,
											  @Field("endDAte") String endDAte);


	/**
	 * 根据手机号获取验证码(待验证)
	 *
	 * @param phone 手机username号
	 */
	@POST("user/deliveryStaff/dyncode")
	Observable<String> getCheckCode(@Path("phone") String phone);

	/**
	 * 根据手机号和设备号获取验证码
	 *
	 * @param mobilephone 手机username号
	 * @param devno       设备号
	 */
	@GET("api/sendsms/{mobilephone}/{devno}")
	Observable<String> getCheckCode(@Path("mobilephone") String mobilephone,
                                    @Path("devno") String devno);
	/**
	 * 手机号登录接口
	 *
	 * @param mobilephone 手机号码
	 * @param verfiycode  用户验证码
	 * @param devno       设备号
	 * @return
	 */
	@POST(value = "api/logon.app")
	@FormUrlEncoded
	Observable<LoginUserInfoEntity> loginByVerfiyCode(@Field("mobilephone") String mobilephone,
                                                      @Field("verfiycode") String verfiycode,
                                                      @Field("devno") String devno);

	/**
	 * 自动登录请求api
	 *
	 * @param token
	 * @param devno
	 * @return
	 */
	@POST("api/autologon")
	@FormUrlEncoded
	Observable<String> autoLogin(@Field("token") String token, @Field("devno") String devno);

	/**
	 * 获取当前更新相关(地址需要根据信息重新设置)
	 * @return
	 */
	@GET(value = "wp/xx/getfile/getbanben.do")
	Observable<UpdateEntity> getUpdateInfo();

}
